class JogoController < HerancaJogadorController
  
  layout "application"
  
  before_filter :jogoDiario, :only => :iniciar
  before_filter :jogoIniciado, :except => :iniciar
  before_filter :jogoEmAndamento, :only => [:iniciar, :proximaPergunta, :repouso]
  
  def iniciar
    @jogo = Jogo.new()
    session[:jogo] = @jogo
    @jogador = Usuarios::Jogador.buscarJogadores(:first, :conditions => {:id => session[:jogador_id]})
    @jogador.atualizar(:ultimoJogo => @jogo.data)    
    redirect_to :action => :repouso  
  end
  
  def repouso
    @jogo = session[:jogo]
  end

  def proximaPergunta
    @jogo = session[:jogo]
    session[:jogoEmAndamento] = true
    @dificuldade = params[:dificuldade]
    # Modificar nessa variavel o tempo limite para perguntas
    @tempo = 60
    @pergunta = @jogo.obterPergunta(@dificuldade)
    @jogo.registrarPergunta(@pergunta)
    @alternativas = []
      
    @alternativas.push(@pergunta.alternativaCorreta)
    @alternativas.push(@pergunta.alternativaErrada1)
    @alternativas.push(@pergunta.alternativaErrada2)
    @alternativas.push(@pergunta.alternativaErrada3)
    @alternativas.push(@pergunta.alternativaErrada4)   
    @alternativas = @alternativas.sort_by {rand}
    
    @jogo.configurarHorarioLimite(@tempo) 
  end
  
  def responder
    @jogo = session[:jogo]
    session[:jogoEmAndamento] = false
    if not @jogo.verificarHorarioLimite
      @jogo.pontuacao = 0
      redirect_to(:action => :parar) and return
    end
    
    @jogo.perguntaAtual += 1
    @alternativa = params[:alternativa]
    @pergunta = Questoes::Pergunta.buscarPerguntas(:first, :conditions => {:id => params[:pergunta][:id]})
    @dificuldade = @pergunta.dificuldade
    @resposta = @pergunta.verificarAlternativa(@alternativa)
   
   if @resposta 
     
      case @dificuldade
      when 1
        @jogo.pontuacao += 100
      when 2
        @jogo.pontuacao += 200
      when 3
        @jogo.pontuacao += 400
      end
   else
      @jogo.pontuacao = 0 
      redirect_to(:action => :parar) and return
   end
  
    if @jogo.verificarPerguntaAtual
      redirect_to(:action => :parar) and return
    end
  
    redirect_to :action => :repouso
  end
  
  def passar
    @jogo = session[:jogo]
    if @jogo.acionarPassar
      session[:jogoEmAndamento] = false
      redirect_to :action => :proximaPergunta, :dificuldade => params[:dificuldade]
    else
      redirect_to :action => :encerrar
    end
  end
  
  def exibirFrequencias
    @jogo = session[:jogo]
    if @jogo.acionarFrequencia
      @pergunta = Questoes::Pergunta.buscarPerguntas(:first, :conditions => {:id => params[:id]})  
      @alternativas = params[:alternativas]
      @frequencias = []
      @frequencias = @pergunta.calcularFrequencias(@alternativas)
      render :update do |page|
        for contador in (0..4)
          freq_alt = "%0.02f" % @frequencias[contador]
          page.replace_html("freq#{contador}", freq_alt)
        end
        page.hide("botao_frequencia")
      end
    else
      redirect_to :action => :encerrar
    end
  end
  
  def eliminarAlternativas
    @jogo = session[:jogo]
    if @jogo.acionarEliminar    
      @pergunta = Questoes::Pergunta.buscarPerguntas(:first, :conditions => {:id => params[:id]})
      @alternativas = params[:alternativas]
      @alternativasRestantes = @pergunta.eliminar(@alternativas)
      render :update do |page|
        page.replace_html('eliminarNumero', "Alternativas eliminadas: #{@alternativasRestantes[5]}")
        for contador in (0..4)
          if @alternativasRestantes[contador].nil?
            page.hide("alt#{contador}")
          end
        end
        page.hide("botao_eliminar")
      end
    else
      redirect_to :action => :encerrar
    end
  end
  
  def parar
    @jogo = session[:jogo]
    @jogador = Usuarios::Jogador.buscarJogadores(:first, :conditions => {:id => session[:jogador_id]})
    @pontuacaoAnterior = @jogador.pontuacaoMensal
    @jogador.pontuacaoMensal += @jogo.pontuacao
    if @jogo.pontuacao > 0
      @mensagem = "GANHOU"
    else
      @mensagem = "PERDEU"
    end
    @jogador.atualizar(:pontuacaoMensal => @jogador.pontuacaoMensal) 
    session[:jogo] = nil
  end
  
  def encerrar
    @jogo = session[:jogo]
    session[:jogoEmAndamento] = nil
    @jogo.pontuacao = 0
    redirect_to :action => :parar
  end
  
  private
  
  def jogoDiario
    if not session[:jogo].present? 
      jogador_logado = Usuarios::Jogador.buscarJogadores(:first, :conditions => {:id => session[:jogador_id]})
      if not jogador_logado.ultimoJogo.nil? #caso numca tenha jogado
        if not Date.today > (jogador_logado.ultimoJogo) #1 jogo por dia
          redirect_to :controller => :menu_jogador, :action => :menu
        end
      end
    else #caso ja esteja jogando
      redirect_to :action => :repouso  
    end
  end
  
  def jogoIniciado
    if not session[:jogo].present? #jogo precisa estar iniciado
      redirect_to :controller => :menu_jogador, :action => :menu
    end
  end
  
end
